package LopCoBan;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.table.AbstractTableModel;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JTextField;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JScrollPane;

import sun.nio.cs.ext.MacCentralEurope;

import java.awt.Panel;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

public class FormNhaCungCap extends JFrame {

	private JPanel contentPane;
	private JTextField txtMancc;
	private JTextField txtTenncc;
	private JTextField txtDcnhacc;
	private JTextField txtSdt;
	private JTextField txtEmail;
	private String maNCChientai = "";
	
	private JTable table;

	//Tạo lưới để hiển thị dữ liệu bên dưới
	private DefaultTableModel luoi = new DefaultTableModel();
	private Object btnSua;

	
	public static void main(String[] args) {
		CoSoDuLieu.KetNoiDuLieu();
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FormNhaCungCap frame = new FormNhaCungCap();
					frame.setVisible(true);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public FormNhaCungCap() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 707, 452);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblThngTinNh = new JLabel("THÔNG TIN NHÀ CUNG CẤP");
		lblThngTinNh.setFont(new Font("Times New Roman", Font.BOLD, 16));
		lblThngTinNh.setBounds(232, 0, 226, 33);
		contentPane.add(lblThngTinNh);
		
		JLabel lblMNhCung = new JLabel("MÃ NHÀ CUNG CẤP");
		lblMNhCung.setBounds(10, 55, 137, 23);
		contentPane.add(lblMNhCung);
		
		JLabel lblTnNhCung = new JLabel("TÊN NHÀ CUNG CẤP");
		lblTnNhCung.setBounds(361, 55, 115, 23);
		contentPane.add(lblTnNhCung);
		
		JLabel lblaChNh = new JLabel("ĐỊA CHỈ NHÀ CUNG CẤP");
		lblaChNh.setBounds(10, 89, 145, 26);
		contentPane.add(lblaChNh);
		
		JLabel lblSinThoi = new JLabel("SỐ ĐIỆN THOẠI");
		lblSinThoi.setBounds(361, 92, 115, 20);
		contentPane.add(lblSinThoi);
		
		JLabel lblEmail = new JLabel("EMAIL NHÀ CUNG CẤP");
		lblEmail.setBounds(10, 131, 126, 23);
		contentPane.add(lblEmail);
		
		txtMancc = new JTextField();
		txtMancc.setEnabled(false);
		txtMancc.setText("mancc");
		txtMancc.setBounds(140, 55, 200, 26);
		contentPane.add(txtMancc);
		txtMancc.setColumns(10);
		
		txtTenncc = new JTextField();
		txtTenncc.setEnabled(false);
		txtTenncc.setText("tenncc");
		txtTenncc.setBounds(486, 53, 200, 26);
		contentPane.add(txtTenncc);
		txtTenncc.setColumns(10);
		
		txtDcnhacc = new JTextField();
		txtDcnhacc.setEnabled(false);
		txtDcnhacc.setText("dcnhacc");
		txtDcnhacc.setBounds(140, 89, 200, 26);
		contentPane.add(txtDcnhacc);
		txtDcnhacc.setColumns(10);
		
		txtSdt = new JTextField();
		
		//Khi LostFocus txtSdt, kiem tra du lieu co phai la so hay khong, neu khong phai thi bao loi
		txtSdt.addFocusListener(new FocusAdapter() {
			@Override
			public void focusLost(FocusEvent arg0) {
				int k;
				if(!txtSdt.getText().trim().equals("")){
					if(!isNumeric(txtSdt.getText().trim())){
					k =JOptionPane.showConfirmDialog(null,"Số điện thoại phải là kiểu số!","Thông báo",JOptionPane.OK_CANCEL_OPTION);
					if(k==1){
					txtSdt.setText("");
					txtSdt.requestFocus();
					} else {
						txtSdt.setText("");
						txtSdt.requestFocus();
					}
					}
				}
			}
		});
		
		
		txtSdt.setEnabled(false);
		txtSdt.setText("sdt");
		txtSdt.setBounds(486, 89, 200, 26);
		contentPane.add(txtSdt);
		txtSdt.setColumns(10);
		
		txtEmail = new JTextField();
		txtEmail.setEnabled(false);
		txtEmail.setText("email");
		txtEmail.setBounds(140, 129, 200, 26);
		contentPane.add(txtEmail);
		txtEmail.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 160, 676, 185);
		contentPane.add(scrollPane);
		
		final JButton btnSa = new JButton("SỬA");
		btnSa.setEnabled(false);
		
		JPanel panel = new JPanel();
		panel.setBounds(10, 356, 573, 57);
		contentPane.add(panel);
		panel.setLayout(null);
		
		final JButton btnThem = new JButton("THÊM");
		btnThem.setBounds(38, 11, 89, 35);
		panel.add(btnThem);
		
		final JButton btnXoa = new JButton("XÓA");
		btnXoa.setEnabled(false);
		btnXoa.setBounds(236, 11, 89, 35);
		panel.add(btnXoa);
		
		final JButton btnHuy = new JButton("HỦY");
		
		//Viet su kien CLick cho nut HUY
		btnHuy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			
				ENnable(false);
				btnSa.setText("SỬA");
				btnXoa.setEnabled(false);
				btnHuy.setEnabled(false);
				btnSa.setEnabled(false);
				btnThem.setText("THÊM");
				table.enable();
				btnThem.setEnabled(true);
			}
		});
		btnHuy.setEnabled(false);
		btnHuy.setBounds(331, 11, 89, 35);
		panel.add(btnHuy);
		
		table = new JTable();
		scrollPane.setViewportView(table);
			
		 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//Chi chon 1 lan duoc 1 dong
		 ListSelectionModel listRow = table.getSelectionModel(); //Chon 1 dong trong Table
				
		listRow.addListSelectionListener(new ListSelectionListener() {
		
			//Kiem tra su kien khi CLICK chon LUOI.
			@Override
			public void valueChanged(ListSelectionEvent arg0) {
				// TODO Auto-generated method stub
				ListSelectionModel lm = (ListSelectionModel)arg0.getSource();
								
				if (!lm.isSelectionEmpty())
				{
					//Khi Click chon luoi thi 2 nut SUA va HUY moi hien len
					btnSa.setEnabled(true);
					btnXoa.setEnabled(true);
					btnHuy.setEnabled(false);
										
					int index = lm.getMinSelectionIndex();
					maNCChientai = table.getModel().getValueAt(index, 0).toString();
					txtMancc.setText(maNCChientai);
					txtTenncc.setText(table.getModel().getValueAt(index, 1).toString());
					txtDcnhacc.setText(table.getModel().getValueAt(index, 2).toString());
					txtSdt.setText(table.getModel().getValueAt(index, 3).toString());
					txtEmail.setText(table.getModel().getValueAt(index, 4).toString());				
				}								
			}
		});
		scrollPane.setViewportView(table);	
		JButton btnThoat = new JButton("THOÁT");
		btnThoat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CoSoDuLieu.DongKetNoi();

				int check=JOptionPane.showConfirmDialog(null, "Bạn có muốn thoát khỏi chương trình không", "Thông Báo",JOptionPane.OK_OPTION);
				if(check ==JOptionPane.YES_OPTION)
				System.exit(1);				
			}
		});
		btnThoat.setBounds(430, 11, 89, 35);
		panel.add(btnThoat);
			
		btnSa.disable();
		btnSa.addActionListener(new ActionListener() {
			
			//Sửa thông tin nhà cung cấp
			public void actionPerformed(ActionEvent arg0) {
				txtMancc.grabFocus();
				ENnable(true);
				txtMancc.setEditable(false);
				btnXoa.setEnabled(false);
				table.disable();//Khong cho phep chon phia duoi vung luoi
				String mancc = txtMancc.getText();
				String tenncc = txtTenncc.getText();
				String diachi = txtDcnhacc.getText();
				String email = txtEmail.getText();
				String sdt = txtSdt.getText();
				if(btnSa.getText()=="LƯU"){
					if(!txtTenncc.getText().equals(" ")){									
							NhaCungCap ncc = new NhaCungCap(mancc, tenncc,diachi,sdt, email);							
							SuaDuLieu(ncc);
							
							ENnable(false);
							btnSa.setText("SỬA");
							btnSa.setEnabled(false);
							btnHuy.setEnabled(false);
							
							
							table.enable();//Cho phep chon phia duoi vung luoi
						
					} else JOptionPane.showConfirmDialog(null, "Tên Chức vụ không được rỗng", "loi",JOptionPane.OK_OPTION);
					txtTenncc.requestFocus();
				} else {
						btnSa.setText("LƯU");
						btnHuy.setEnabled(true);	
				}
			}
		});
		
		btnSa.setBounds(137, 11, 89, 35);
		panel.add(btnSa);
		
		
		

		//Xóa thông tin Nhà cung cấp
		btnXoa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int check=JOptionPane.showConfirmDialog(null, "Bạn có chắc chắn muốn xóa thông tin này không?", "Thông Báo",JOptionPane.OK_OPTION);
				if(check ==JOptionPane.YES_OPTION)
				XoaDuLieu();
				btnXoa.setEnabled(false);
				btnSa.setEnabled(false);
				
			}
		});
		
		//Thêm thông tin Nhà cung cấp
		btnThem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
						
				txtMancc.grabFocus();
				ENnable(true);
				table.disable();//Khong cho phep chon phia duoi vung luoi
			
				 
				String mancc = txtMancc.getText();
				String tenncc = txtTenncc.getText();
				String diachi = txtDcnhacc.getText();
				String email = txtEmail.getText();
				String sdt = txtSdt.getText();
				btnSa.setEnabled(false);
				if(btnThem.getText()=="LƯU"){
					
					if(!txtMancc.getText().equals(" ")){
						if (KiemTraTrung(mancc))
						{
							
							NhaCungCap ncc = new NhaCungCap(mancc, tenncc,diachi,sdt, email);
							
							CoSoDuLieu.ThemDuLieu(ncc);
							
							ENnable(false);
							btnThem.setText("THÊM");
							btnHuy.setEnabled(false);
							table.enable();//Cho phep chon phia duoi vung luoi
						}
							else JOptionPane.showConfirmDialog(null, "Mã Chức vụ đã tồn tại rồi!!", "loi",JOptionPane.OK_OPTION);
						txtMancc.requestFocus();
						LoadDuLieu();
						//btnThem.setText("THÊM");
					} else JOptionPane.showConfirmDialog(null, "Mã Chức vụ không được rỗng", "loi",JOptionPane.OK_OPTION);
					txtMancc.requestFocus();
				} else {
						btnThem.setText("LƯU");
						setNull();	
						
						btnHuy.setEnabled(true);
				}
			}
		});
		LoadDuLieu();
		
	}
	
	
	public static boolean isNumeric(String str)  
	//Kiểm tra dữ liệu nhập có phải là number không
	//return TRUE nếu là số.
	  {  
	    try  
	    {  
	      double d = Double.parseDouble(str);  
	    }  
	    catch(NumberFormatException nfe)  
	    {  
	      return false;  
	    }  
	    return true;  
	  }  
	
	//Kiem tra Nhap lieu
	private boolean KiemTraDuLieuNhap()
	{
		if(this.txtMancc.getText().trim().equals(" ")){
			JOptionPane.showConfirmDialog(this, "Chưa Nhập Mã Nhà cung cấp!", "Lỗi", JOptionPane.ERROR_MESSAGE);
			this.txtMancc.requestFocus();
			return false;
		}
		if(this.txtTenncc.getText().trim().equals("")){
			JOptionPane.showConfirmDialog(this, "Chưa nhập Tên nhà cung cấp!", "Lỗi", JOptionPane.ERROR_MESSAGE);			
			this.txtTenncc.requestFocus();
			return false;			
		}
		if(this.txtDcnhacc.getText().trim().equals("")){
			JOptionPane.showConfirmDialog(this, "Chưa nhập chức vụ!", "Lỗi", JOptionPane.ERROR_MESSAGE);			
			this.txtDcnhacc.requestFocus();
			return false;			
		}
		return true;
	}	
	
	//Set NULL cac TextBox
	private void setNull(){
		
		txtMancc.setText(" ");
		txtTenncc.setText(" ");
		txtDcnhacc.setText(" ");	
		txtEmail.setText(" ");
		txtSdt.setText(" ");
	}

//Truyen bien TRUE hoặc FALSE cho ham ENnable để cho phép nhập liệu vào các Textbox hay không
	private void ENnable(boolean t){
		txtMancc.setEnabled(t);	
		txtTenncc.setEnabled(t);	
		txtDcnhacc.setEnabled(t);
		txtSdt.setEnabled(t);
		txtEmail.setEnabled(t);
	}

	
	private boolean isnotNull()
	{
				
		if ((txtMancc.getText()=="") || (txtTenncc.getText()==""))
		return false;
		else return true;
	}
	
	private boolean KiemTraTrung(String mancc)
	{
		return CoSoDuLieu.KiemTraTrung(NhaCungCap.class, "MaNCC", mancc);
	}
	
	
	private void LoadDuLieu()
	{
		
		setNull();
		
		ObjectSet<NhaCungCap> dsncc = CoSoDuLieu.LayDuLieu(NhaCungCap.class);
		luoi = new DefaultTableModel();
		table.setModel(luoi);
		luoi.addColumn("MÃ NHÀ CC ");
		luoi.addColumn("TÊN NHÀ CUNG CẤP");
		luoi.addColumn("ĐỊA CHỈ NHÀ CC");
		luoi.addColumn("ĐIỆN THOẠI");
		luoi.addColumn("EMAIL");
		for( NhaCungCap ncc:dsncc)
		{
			Object[] r = { ncc.getMaNCC(), ncc.getTenNCC(), ncc.getDiachi(), ncc.getSoDT(),ncc.getEmail() };
			luoi.addRow(r);
		}
		if (dsncc.size()> 0)
		{
			//((JComponent) this.btnSua).setEnabled(true);
		}
		else
		{
			
			
		}
		
	}
	private void XoaDuLieu()
	{	
		CoSoDuLieu.XoaDuLieu(NhaCungCap.class, "MaNCC", maNCChientai);
		LoadDuLieu();
	}
	private void SuaDuLieu(NhaCungCap nccNew)
	{	
		
		CoSoDuLieu.CapNhatDuLieu(NhaCungCap.class, "MaNCC", maNCChientai, nccNew);
		LoadDuLieu();
	}
}
